package com.activitiFlow.service;

import java.util.List;
import java.util.Map;

import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;

public interface ITaskBiz {
	
	/**
	 * 根据taskId获取对应的任务信息
	 * @param taskId
	 * @return
	 */
	Task getTaskByTaskId(String taskId);
	

	/**
	 * 获取当前用户需要办理的任务列表
	 * @param userCode
	 * @return
	 */
	List<Task> getRunTaskListByUserCode(String userCode);
	
	/**
	 * 根据任务对象Id获取历史的审批信息
	 * @param taskId
	 * @return
	 */
//	List<Comment> getHistCommentByProcessInstanceId(String processInstanceId);
	
	/**
	 * 根据taskid查询历史的审批信息
	 * @param taskId
	 * @return
	 */
	List<Comment> getHistCommentByTaskId(String taskId);
	
	/**
	 * 向审批记录表添加记录
	 * @param taskId
	 * @param processInstanceId 任务对象Id
	 * @param message
	 */
	void addComment(String taskId, String processInstanceId, String message);
	
	/**
	 * 办理task审批
	 * @param taskId
	 * @param variables
	 */
	void saveSubmitTask(String taskId, Map<String, Object> variables);
	

	/**
	 * 给task任务设置新的办理人 可能是转发给其他审批人， 也可能时退回给上一环节审批人
	 * @param taskId
	 * @param assigne 新办理人
	 */
	void setAssigne(String taskId, String assigne);
	
	/**
	 * 根据任务对象Id查询当前任务信息
	 * @param processInstanceId
	 * @return
	 */
	Task getTaskByTaskProcessInstanceId(String processInstanceId);
	
	/**
	 * 指定用户拾取某个任务，这样在用户组中的其他用户就不能再查询、 办理此任务。
	 * @param taskId
	 * @param userCode
	 */
	void claim(String taskId, String userCode);
	/**
	 * 删除任务的某个参与者
	 * @param taskId
	 * @param userCode
	 */
	void deleteCandidateUser(String taskId, String userCode);
	/**
	 * 添加任务的参与者
	 * @param taskId
	 * @param userCode
	 */
	void addCandidateUser(String taskId, String userCode);

	/**
	 * 获取任务对象的流程变量
	 * @param processInstanceId
	 * @param usercode
	 * @return
	 */
	String getVariable(String processInstanceId, String usercode);

	/**
	 * 根据申请单Id和流程Id查询审批记录
	 * @param id
	 * @param _buinessKey
	 * @return
	 */
	List<Comment> getHistCommentByBorrowIdAndBuinessKey(String borrowId,String flowKey);


	/**
	 * 
	 * @param userCode 办理人
	 * @param taskId 任务id
	 * @param outcome 审批结果 例如：同意 不同意
	 * @param message 批注信息
	 * @param _candidateUsers 下一环节办理人
	 * @return
	 */
	int submitTask(String userCode, String taskId, String outcome,String message, String _candidateUsers);

}
